package main

import (
	"fmt"
	"sync"
)

func main() {

	loopFunc()
}

func loopFunc() {

	lock := sync.Mutex{}

	// 循环中的 defer 会压栈，所有循环结束后出栈
	// 所以第 1 次循环结束后不会执行 defer，意味着锁没释放，导致第 2 次循环的时候一直获取不到锁，造成死锁
	for i := 0; i < 3; i++ {
		lock.Lock()
		defer lock.Unlock()
		fmt.Println("loopFunc:", i)
	}
}
